const path = require('path');
const ESLintWebpackPlugin = require("eslint-webpack-plugin");
const HtmlWebpackPlugin = require("html-webpack-plugin");

module.exports = {
    // 1. entry
    entry: './src/main.js', // 单入口
    output: undefined,
    // 3. mode 模式
    mode: 'development',
    // 4. module, 可以通过loader处理其他资源
    module: {
        rules: [
            {
                test: /\.css$/,
                use: ['style-loader', 'css-loader']
            },
            {
                test: /\.less$/,
                use: ['style-loader', 'css-loader', 'less-loader']
            },
            {
                test: /\.(png|jpe?g|gif|webp)$/,
                type: "asset", // 如果大小超过8KB，就会以文件的形式展现，如果小于8M那么会变成base64的URL
                generator: {
                    // 配置图片资源生成的路径及文件名
                    filename: 'static/images/[hash]_[name][ext]'
                },
                parser: {
                    dataUrlCondition: {
                        // 指定转化base64URL的临界值
                        maxSize: 8 * 1024 // 4kb
                    }
                }
            },
            {
                test: /\.(ttf|woff2?)$/,
                type: 'asset/resource',
                generator: {
                    // 配置图片资源生成的路径及文件名
                    filename: 'static/font/[hash:8]_[name][ext]'
                },
            },
            {
                test: /\.js$/,
                loader: "babel-loader",
                exclude: /node_modules/
            }
        ]
    },
    // 5. plugin
    plugins: [
        new ESLintWebpackPlugin({
            // 指定检查文件的根目录
            context: path.resolve(__dirname, 'src')
        }),
        new HtmlWebpackPlugin({
            // 配置html的模板文件
            template: path.resolve(__dirname, '../src/index.html'),
            // 输出文件名==》 dist/下生成的html文件的文件名
            filename: "index.html", // localhost:3000/index.html
            // 决定main.js自动插入的位置
            inject: "body"
        })
    ],

    // 配置服务
    devServer:{
        host:'localhost',
        port:3000,
        // 热更新
        hot:true,
        open: true // 浏览器自动打开
    },
    devtool: "cheap-module-source-map"
}